<?php
/**
 * Created by PhpStorm.
 * User: s.utkin
 * Date: 29.09.14
 * Time: 12:35
 */

namespace Pinenut\Action\Helper;

/**
 * Хелпер контроллера, упрощающий публикацию ресурсов
 *
 * @package Pinenut\Action\Helper
 */
trait ResourceManager {
	public $fragmentInfo;

	/**
	 * Добавляет в новый пакет в список публикуемых на странице пакетов ресурсов
	 *
	 * @param $name - имя пакета ресурсов
	 */
	public function registerResourcePackage($name)
	{
		foreach ((array)$name as $item) {
			$this->response->append('resourcePackages', $item);
		}
	}

	/**
	 * Начало инлайн-блока ресурсов
	 *
	 * @param $fragmentType - тип фрагмента: 'js' или 'css'
	 * @param $position - Позиция вывода: \Resources\Layout\Postprocessing::*
	 * @param null $fragmentId - идентификатор фрагмента
	 */
	public function inlineBlockBegin($fragmentType, $position, $fragmentId = null) {
		$this->fragmentInfo[] = [
			'type' => $fragmentType,
			'position' => $position,
			'id' => $fragmentId,
		];

		ob_start();
	}

	/**
	 * Конец инлайн-блока ресурсов
	 *
	 * @throws \Exception
	 */
	public function inlineBlockEnd() {
		$content = ob_get_clean();

		if (count($this->fragmentInfo) < 1) {
			throw new \Exception('fragmentInfo is empty');
		}

		$info = array_pop($this->fragmentInfo);
		$info['id'] = $info['id'] === null ? md5($content) : $info['id'];
		$info['content'] = $content;
		$fragmentIndex = strtolower($info['type']) . 'Code';
		$this->response->append('resourcePackages_' . $fragmentIndex, $info);
	}
} 